// 代码题三、基于下面提供的代码，完成后续的四个练习

const MyPromise = require('./04myPromise')

const promise = new MyPromise((resolve, reject) => {
    // 异步测试
    setTimeout(() => {
        resolve('成功了啦')
        // reject('失败咯喂')
    }, 2000)
    // throw new Error('执行器错误')
})

// then方法多次调用
// promise.then(val => {
//     console.log(val)
// })
// promise.then(val => {
//     console.log(val)
// })
// promise.then(val => {
//     console.log(val)
// })

// then方法链式调用
// function other () {
//     return new MyPromise((resolve, reject) => {
//         resolve('other')
//     })
// }
// promise.then(val => {
//     console.log(val)
//     return 88
// }).then(val => {
//     console.log(val)
//     return other()
// }).then(val => {
//     console.log(val)
// }, reason => {
//     console.log(reason)
//     return 89899
// }).then(val => {
//     console.log(val)
// })

// 识别promise对象自返回
// const pp = promise.then(function(val){
//     console.log(val)
//     return pp
// })
// pp.then(val => {
//     console.log(val)
// }, reason => {
//     console.log(reason)
// })


// then方法改成参数可选
// promise.then().then().then(val => console.log(val), reason => console.log(reason))


// all方法测试
function P1 () {
    return new MyPromise (function(resolve) {
        setTimeout(function () {
            resolve('P1')
        }, 1000)
    })
}
function P2 () {
    return new MyPromise (function(resolve, reject) {
        // resolve('P2 resolve')
        reject('P2 reject')
    })
}
// MyPromise.all(['1', '2'. P1(), P2(), '3'])


// resolve方法
// MyPromise.resolve(88).then(val => console.log(val))
// MyPromise.resolve(P1()).then(val => console.log(val))


// finally方法
// P2().finally(() => {
//     console.log('finally')
//     return P1()
// }).then(val => {
//     console.log(val)
// }, reason => {
//     console.log(reason)
// })

// catch 方法
P2()
    .then(val => console.log(val))
    .catch(reason => console.log(reason))